package com.catazy.album.domain.usecase

import com.catazy.album.domain.model.Album
import com.catazy.album.domain.repository.AlbumRepository
import com.catazy.base.domain.result.Result

/**
 * 作者: Tao
 * 日期: 2024/12/23
 * 时间: 14:43
 * 描述: GetAlbumUseCase类用于处理获取专辑信息的请求。
 * 它通过依赖的AlbumRepository实例来获取专辑数据。
 *
 * @param albumRepository 提供专辑信息的数据源
 */
internal class GetAlbumUseCase(
    private val albumRepository: AlbumRepository
) {

    /**
     * 暂停函数invoke允许通过协程异步获取专辑信息。
     * 它需要艺术家名称和专辑名称作为必填参数，以及一个可选的MusicBrainID (mbId) 来查询专辑信息。
     * @param artistName 艺术家名称，用于搜索专辑信息
     * @param albumName 专辑名称，用于搜索专辑信息
     * @param mbId 可选的MusicBrainz ID，用于精确搜索
     * @return 返回一个Result对象，包含成功获取的Album数据或失败信息
     */
    suspend operator fun invoke(
        artistName: String,
        albumName: String,
        mbId: String?
    ): Result<Album> {
        // 调用AlbumRepository的getAlbumInfo方法来获取专辑信息
        return albumRepository.getAlbumInfo(artistName, albumName, mbId)
    }
}